package football.modele;

import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Tournoi implements Serializable, java.lang.Comparable {

	private static final long serialVersionUID = 7037494051700694971L;
	private int idTournoi;
	private String nomTournoi;
	private String lieuTournoi;
	private Date dateTournoi;
	private Set<Equipe> listeEquipes;
	private int nbParticipantsMax;
	private Set<Phase> listePhases;
	private Boolean valide;

	public Tournoi() {
		super();
		this.listeEquipes = new HashSet<Equipe>();
		this.listePhases = new HashSet<Phase>();
	}

	public Tournoi(String nomTournoi, String lieuTournoi, Date dateTournoi,
			int nbParticipantsMax) {
		super();
		this.nomTournoi = nomTournoi;
		this.lieuTournoi = lieuTournoi;
		this.dateTournoi = dateTournoi;
		this.nbParticipantsMax = nbParticipantsMax;
		this.listeEquipes = new HashSet<Equipe>();
		this.listePhases = new HashSet<Phase>();
		this.valide = false;
	}

	@Id
	@GeneratedValue
	public int getIdTournoi() {
		return idTournoi;
	}

	public void setIdTournoi(int idTournoi) {
		this.idTournoi = idTournoi;
	}

	public String getNomTournoi() {
		return nomTournoi;
	}

	public void setNomTournoi(String nomTournoi) {
		this.nomTournoi = nomTournoi;
	}

	public String getLieuTournoi() {
		return lieuTournoi;
	}

	public void setLieuTournoi(String lieuTournoi) {
		this.lieuTournoi = lieuTournoi;
	}

	public Date getDateTournoi() {
		return dateTournoi;
	}

	public void setDateTournoi(Date dateTournoi) {
		this.dateTournoi = dateTournoi;
	}

	@OneToMany(mappedBy = "tournoi", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
	public Set<Equipe> getListeEquipes() {
		return listeEquipes;
	}

	public void setListeEquipes(Set<Equipe> listeEquipes) {
		this.listeEquipes = listeEquipes;
	}

	@OneToMany(mappedBy = "tournoi", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
	public Set<Phase> getListePhases() {
		return listePhases;
	}

	public void setListePhases(Set<Phase> listePhases) {
		this.listePhases = listePhases;
	}

	public int getNbParticipantsMax() {
		return nbParticipantsMax;
	}

	public void setNbParticipantsMax(int nbParticipantsMax) {
		this.nbParticipantsMax = nbParticipantsMax;
	}

	public Boolean getValide() {
		return valide;
	}

	public void setValide(Boolean valide) {
		this.valide = valide;
	}

	@Override
	public int compareTo(Object o) {
		int nombre1 = ((Tournoi) o).getIdTournoi();
		int nombre2 = this.getIdTournoi();
		if (nombre1 > nombre2)
			return -1;
		else if (nombre1 == nombre2)
			return 0;
		else
			return 1;
	}

}
